ClotPh, при наличие 20-30 юнитов под бафом лаги обеспечены
аффтару
делай как писали выше
пикаем всех юнитов(кроме дамми херни) и проверяем наличие бафа и если баф есть даём спел на повышение макс хп одновременно запоминая юнита
когда баф потерян убираем повышение макс хп
Иллюзии это точно такие же юниты, с которых они скопированы (ну иллюзии мастера клинка - точно такие же мастера клинка) Все дело задет бафф способности которая призвала иллюзию, ибо именно бафф делает флаг на юните - что он является иллюзией, в коде игры стоят проверки что за юнита с флагом иллюзии не дают награды опытом и ресурсами, в то же время бафф удаляет юнита при смерти, так же рисуя эффект тумана (любой заданный).
Кроме стандартной проверки - isUnitIlusion или проверки баффа, как либо отличить героя от его иллюзии нельзя, гребаные иллюзии даже изучают скиллы при появлении (когда мастер клинка вызывает иллюзию, создается герой, который учит все абилки мастера клинка, у него точно такое же кол-во опыта, хп и прочие параметры). Илююзии наследуют абсолютно все абилки, но из за сайленса - часть из них не работает (особый вид сайленса убирает с карты комманд все активные способности, чтобы вы не тупили при игре и не пытались тыкать абилки у иллюзий). Список работают\не работают у иллюзий сделан близзардами из соображений баланса, и как то особо изменить его у нас возможности нет. В каждой способности есть проверка на сайленс и действия, исходя из вида сайленса. Ауры не подвержены никаким сайленсам....
Extremator:
Сделал, чтобы человек понял принцип
Он вполне и сам может разобраться как, если сделает несколько кликов по поиску, ему же будет полезнее
А тебе проще было не делать вообще, так что иди обратно в будку и не тявкай
Какое то странное решение, ты хочешь чтобы юниты под аурой обладали способностью грабеж?
Ну так нафига столько гемора, просто берешь ауру пустышку, и проверяешь кто нанес урон зданиям, если у него есть бафф - ауры грабежа, высчитываешь количество украденных ресурсов исходя из урона.
Создай изображение размером 256x256. Конвертируй его в формат TGA. Переименуйте в war3mapPreview.tga и загрузите в карту, в карте уберите путь war3mapimported
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
There must be a file of one of the following types: mdl, mdx, fbx, obj, max, blend, mb, ma, 3ds, dae, dxf, usd, usdz, stl, stp, wrl, m2, zip, 7z, rar, tar, gz, apk, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Текст не проходит по формату, не совпадает с /(youtube.com|youtu.be|vimeo.com|twitch.tv|dailymotion.com|vk.com|rutube.ru|vkvideo.ru|plvideo.ru|bilibili.com|\/files\/)/
Условия прохождения автомодерации:
Ресурс должен включать ссылку на внешний видеоисточник или внутренний видеоплеер.
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
Text not passed the format, no matches of /(youtube.com|youtu.be|vimeo.com|twitch.tv|dailymotion.com|vk.com|rutube.ru|vkvideo.ru|plvideo.ru|bilibili.com|\/files\/)/
Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Текст не проходит по формату, не совпадает с /(youtube.com|youtu.be|vimeo.com|twitch.tv|dailymotion.com|vk.com|rutube.ru|vkvideo.ru|plvideo.ru|bilibili.com|\/files\/)/
Условия прохождения автомодерации:
Ресурс должен включать ссылку на внешний видеоисточник или внутренний видеоплеер.
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
Text not passed the format, no matches of /(youtube.com|youtu.be|vimeo.com|twitch.tv|dailymotion.com|vk.com|rutube.ru|vkvideo.ru|plvideo.ru|bilibili.com|\/files\/)/
S2I принимает строку в качестве параметра и никак её не изменяет
с чего вдруг он должен создавать новые строки?
I2S создаёт временную строку
если в таблице есть строка равная временной по хэшу то он возвращает строку из таблицы
если в таблице строки нету то он добавляет нашу временную строку в таблицу
т.е. обычный алгоритм хэширования
Он лежит на случай если игре необходим данный реф. В РО ты мог иногда видеть необходимое приложение и варианты small, medium и large. Также по возможности спецэффекты и эффекты способностей могут к ней крепиться.
А collission насколько я помню отвечает за выделение или за столкновение летающих юнитов. На всякий случай оставляй, а то мало ли, да и места много не просит.
Джентельмены, очень извиняюсь, рассчитываю, что ваши рекомендации пригодятся мне в будущем, но в данном случае как-то умудрился пропустить, что в условиях boolean comparsion в самом низу начального предложения стоит Неуязвимость к магии. Мне конкретно в данном случае этого достаточно. Ещё раз прошу прощения за потраченное вами время)
Все оказалось куда проще, чем я думала. (PS: rsfghd уже это же и написал, но ты его не понял)
В первом варианте у тебя "Units in range matching condition", к ней подсказка
Use 'Matching Unit' to refer to the unit on whom the comparison is being performed.
А ты использовал (Picked unit)! Почему так нельзя? Потому что, matching condition = значит там Filter внутри, а внутри фильтра используется функция GetFilterUnit т.е. (matching unit).
из triggerstrings.txt:
GetEnumUnitHint="When using the 'Pick Every Unit...' action, this refers to each unit as it is picked."
GetFilterUnitHint="Use this to refer to the unit being considered for 'Units Matching Condition' functions."
А вот (Picked unit) можно использовать, когда просто есть проход по группе, как в твоем втором варианте.
Я тут вытащила код триггера из карты из war3map.j
Сгенерированный код триггера
=========================================================================== Trigger: IshillUltimte ===========================================================================
function Trig_IshillUltimte_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A001' ) ) then
return false
endif
return true
endfunction
function Trig_IshillUltimte_Func002Func001Func002C takes nothing returns boolean
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then
return false
endif
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_GROUND) == true ) ) then
return false
endif
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false ) ) then
return false
endif
if ( not ( IsUnitAlly(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == false ) ) then
return false
endif
if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetEnumUnit()) != GetOwningPlayer(GetSpellAbilityUnit()) ) ) then
return false
endif
return true
endfunction
function Trig_IshillUltimte_Func002Func001C takes nothing returns boolean
if ( not Trig_IshillUltimte_Func002Func001Func002C() ) then
return false
endif
return true
endfunction
function Trig_IshillUltimte_Func002A takes nothing returns nothing
if ( Trig_IshillUltimte_Func002Func001C() ) then
call GroupAddUnitSimple( GetEnumUnit(), udg_UltimateIshillEffect )
else
endif
endfunction
function Trig_IshillUltimte_Actions takes nothing returns nothing
call QuestMessageBJ( GetPlayersAll(), bj_QUESTMESSAGE_UPDATED, "TRIGSTR_019" )
call ForGroupBJ( GetUnitsInRangeOfLocAll(600.00, GetUnitLoc(GetSpellAbilityUnit())), function Trig_IshillUltimte_Func002A )
call ForGroupBJ( udg_UltimateIshillEffect, function Trig_IshillUltimte_Func003A )
call TriggerSleepAction( 20.00 )
call ForGroupBJ( udg_UltimateIshillEffect, function Trig_IshillUltimte_Func005A )
call GroupClear( udg_UltimateIshillEffect )
endfunction
===========================================================================
function InitTrig_IshillUltimte takes nothing returns nothing
set gg_trg_IshillUltimte = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_IshillUltimte, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_IshillUltimte, Condition( function Trig_IshillUltimte_Conditions ) )
call TriggerAddAction( gg_trg_IshillUltimte, function Trig_IshillUltimte_Actions )
endfunction
Маленькие оптимизации:
IsUnitAlly+GetOwningPlayer(GetSpellAbilityUnit()) и IsUnitEnemy по идее взаимоисключающие, хватило бы только IsUnitEnemy(...)
call ForGroupBJ( GetUnitsInRangeOfLocAll(600.00, GetUnitLoc(GetSpellAbilityUnit())), function Trig_IshillUltimte_Func002A )
Тут утечка локации, потому что GetUnitLoc создает новую, но она потом не удаляется. Решение в ГУИ: записать GetUnitLoc в глобальную (или локальную) переменную, пройтись по группе, и удалить локацию (DestroyLocation).
Проблема: у тебя, как называется в местном жаргоне, триггер не MUI. То есть он работает только с одним юнитом одновременно, если два юнита используют заклинание, то оно сломается.
Посмотри на Trig_IshillUltimte_Actions. Ты там используешь udg_UltimateIshillEffect до засыпания на 20с и после. Что будет если в этот промежуток времени кто-нибудь снова вызовет триггер? Ацская сотона. Я не знаю как принято, но по-моему единственный выход - это локально создать группу, чтобы она у кастующего юнита была своя, а в конце триггера её удалять.
Прочитай пару туториалов про локальные переменные и утечки. Если не прозреешь - перепишу всё на кастомный код за тебя, чтобы как пример был наглядный.
Оригинально) Круто, что работает.
По идее нужно не mdx открывать в Блокноте, а пересохранить модель в формат mdl и открывать в Блокноте её. Файлы tga являются просто другим форматом текстур, который используется в игре. Если слишком много весят, можешь перевести в blp, но считается, что у tga качество получше.
Я думаю, что нужно копать в сторону файлика war3campaign.imp, я не шарю в hex, хм. Думаю, что там побилось что-то
Обычный редактор помог мне понять в чем причина. У меня был триггер, который очищал память после ролика. Я наверное излишне заморачиваюсь с оптимизацией, ведь близзы такого и близко не делали, но я удаляю все, что уже не используется: звуки, области, локации и так далее. Так вот у меня было 3 области, на которые были повешены звуки. И хоть я и закомментил название переменных в коде в этом триггере, мне редактор звука не давал завести переменные до тех пор, пока я не удалил закомментированный код. Получилось по новой завести переменные и карта стала запускаться! Фух, я аж выдохнул, а то уже отчаяние подступало, неделя работы ушла бы коту под хвост. Огромное спасибо тебе дружище, что отозвался и пытался набрасывать на вентилятор варианты, ты очень поддержал меня морально в трудную минуту!
Оказывается причина была намного сложнее)))
Тот самый триггер-комментарий был обычным триггером (т.е хранил всю информацию о действиях и т.д), но отображался как комментарий
Поэтому помогло только его удаление
"Открыть редактор реестра (Windows + R, ввести regedit).
Перейти по пути HKEY_CURRENT_USER\SOFTWARE\Blizzard Entertainment\WorldEdit.
Найти строку Tool Windows и удалить ее.
Готово. Теперь редактор старых версий будет работать. Но проблема повторится, если зайти в редактор 1.32. При ее возникновении нужно заново удалить строку Tool Windows."
В настройках редактора попробуй поставить настройки графики средние или низкие.
проверил только что, ты прав, проблема в настройках графики, только наоборот, надо ставить Высокие чтобы модель не крашала редактор.
Собственно, фикс:
Зайти в редакторе в Файл -> Параметры
Поставить здесь всё на Высокие, либо галочку "параметры из варкрафта" и в самом варкрафте в настройках поставить всё на высокие.
Модели вообще редко тестируются на других настройках графики, в основном все пилится под Высокие, так что следует их оставить навсегда и не играть на других.
В любом случае приказ ПКМ - это приказ smart, то есть попробуй такой триггер:
Событие - Generic unit Отдал приказ цель-точка
Условие - Unit-type of (Triggering unit) равно Твой_городской_защитник и (Issued order) равно smart
Действие - Pause (Triggering unit), Issue order with no target Стоп (Triggering unit) и Unpause (Triggering unit)
8gabriel8, приоритет менять нельзя
стандартный ии использует это поле для контроля юнитов
пишем свой ии в котором вместо приоритета юзаем свою переменную которой можем задавать любое значение 8gabriel8:
Но для меня это путь в Москву через Владивосток
ну если между тобой и Москвой находится Владивосток то иначе никак(а вар3 как раз расположен за Владивостоком)
Пока для тестирования оставил вариант с маленькой атакой, так как для нее не требуется писать дополнительных скриптов. Я не знаю, как работают функции отбора групп (отрядов) по условиям и как это оптимизировано внутри игры, но есть подозрение, что если в таймере выбирать все стенки на карте и потом искать боевые единицы врага вокруг каждой из них, это может быть долго. Для такого варианта хорошо кэшировать стены при постройке, но я на время тестирования не стал над этим заморачиваться. Всем спасибо за помощь.
» WarCraft 3 / Как сделать ауру героя?
» WarCraft 3 / Баг с изображением
» WarCraft 3 / Кто может реализовать задумку?
» WarCraft 3 / Помогите найти кастомную карту.
» WarCraft 3 / Автопуть для импорта пиктограмм
» WarCraft 3 / Конкурс на $200 (создать расу со всеми механиками и юнитами)
» WarCraft 3 / Как IntegraL Создал Легенду TCOM в Warcraft III!
Ресурс должен включать ссылку на внешний видеоисточник или внутренний видеоплеер.
» WarCraft 3 / Сообщество XGM Называет Его Топ-1: Как IntegraL Создал Легенду TCOM в Warcraft III!
Ресурс должен включать ссылку на внешний видеоисточник или внутренний видеоплеер.
» WarCraft 3 / Вопрос
» WarCraft 3 / Условие триггера
» WarCraft 3 / Как удалить все файлы импорта?
» WarCraft 3 / Вылетает редактор карт
» WarCraft 3 / ⚽ Banjoball v1.21a: Эпичный Футбол с Магией в Warcraft 3! 🔥🎮
Ресурс должен включать ссылку на внешний видеоисточник или внутренний видеоплеер.
» WarCraft 3 / Пути к модельке способности
» WarCraft 3 / Анимация модели не фиксится в mdlvis
» WarCraft 3 / Классификация воина
» WarCraft 3 / illidan test
» WarCraft 3 / Приоритеты для атаки врагами